PROJECT: OnlyPets (ehemals OnlyCats)
STACK:
- Backend: NestJS + Prisma
- DB: PostgreSQL (Docker, DEV)
- Frontend: Next.js (separat, noch nicht Thema dieses Blocks)

CORE IDEA:
- Tiere stehen IMMER im Mittelpunkt
- Kein Post ohne Pet
- User sind sekundär, Pets sind primäre Entität

DATA PRINCIPLES:
- Single Source of Truth
- Pet.age wird NIE gespeichert
- Stattdessen: Pet.birthDate (DateTime)
- Alter & Geburtstag werden IMMER berechnet (Utils / Frontend)

PET RULES:
- birthDate optional, aber bevorzugt
- fallbackAge nur temporär (kein Persist)
- Pet Edit erlaubt birthDate-Korrektur
- type & breed sind immutable
- visibility: public | followers (serverseitig enforced)

BACKEND STATUS:
- Prisma Schema vorhanden
- Migration erfolgreich ausgeführt
- Tabellen existieren
- Follow-System implementiert
- Visibility-Logik vorbereitet
- Notifications vorbereitet (FOLLOW, BIRTHDAY – später)

DATABASE (DEV):
- PostgreSQL läuft im Docker
- Eigener Port: 55432
- Credentials:
  user: onlypets_user
  pass: onlypets_pass
  db:   onlypets
- DATABASE_URL:
  postgresql://onlypets_user:onlypets_pass@localhost:55432/onlypets

SEED STATUS:
- seed.ts vollständig funktionsfähig
- Seed OHNE Passwort (Auth kommt später)
- User werden per upsert erstellt (idempotent)
- Enthält:
  - 3 Alpha-User
  - Pets mit birthDate (DateTime via new Date())
  - Posts
  - Follow-Beziehungen
- Seed läuft nur NACH Migration
- Seed mehrfach ausführbar ohne Fehler

AUTH STATUS:
- Noch kein Passwortfeld im User-Model
- Auth bewusst verschoben
- Schema & Seed auth-ready gedacht (passwordHash später)

ISSUES:
- Issue #1: Seed / DB → erledigt
- Issue #242: Teilweise vorbereitet (Seed & Datenbasis), noch offen

LAST ACTIONS:
- Docker-Port-Konflikte gelöst
- ENV-Probleme identifiziert & behoben
- Migration → Seed Reihenfolge geklärt
- Seed finalisiert & stabil gemacht

NEXT INTENDED STEPS:
- Frontend anbinden & Feed testen
- Oder Auth vorbereiten (passwordHash + Migration)
- Oder Seed erweitern (Likes, Comments, Discovery)



-----------------------------------------------------
Gitea - Issue Liste zum abarbeiten ! 


Projekt: OnlyPets (Social Network für Haustiere)

Tech-Stack:
- Backend: NestJS + Prisma
- DB: PostgreSQL (lokal, aktuell instabil / Multi-Versionen 12,16,17)
- Frontend: Next.js (läuft getrennt unter C:/Projekte/OnlyPets/)
- Repo: Gitea (selfhosted), Issues aktiv genutzt
- OS: Windows (PowerShell)

Status Backend (wichtig):
- Prisma Schema vorhanden (User, Pet, Post, Follow etc.)
- birthDate wird als DateTime gespeichert (nicht Alter)
- Follow/Unfollow Controller existiert
- Feed + Discovery Feed Logik umgesetzt (Visibility public / followers)
- Fake-Auth / Dev-User Konzept beschlossen (kein echter Login yet)
- Seed läuft prinzipiell, aber:
  - PostgreSQL Auth & Rollen waren fehlerhaft
  - Mehrere PG-Versionen gleichzeitig aktiv
  - Tabellen fehlten → Migration nötig
  - Seed jetzt OHNE Passwort (Auth nur vorbereitet)
  - Seed-Fehler zuletzt: Unique constraint (email) → Seed muss idempotent werden

Prisma / DB Probleme:
- DATABASE_URL mehrfach getestet (5432 / 55432)
- Auth-Fehler → User/Rolle existierte nicht
- Lösungspfad: 
  - Entweder PostgreSQL sauber neu (1 Version)
  - ODER Übergang auf Docker-Postgres
- Migration (`prisma migrate deploy`) vor Seed ist Pflicht

Seed-Ziel:
- Dev-User (ohne Passwort)
- Pets mit birthDate als Date (ISO / new Date())
- Posts, Follows
- Kein Auth-Zwang

Auth-Strategie (entscheidend):
- Guard-first, KEINE Auth-Logik in Services
- Globaler Dummy Auth Guard
- @Public() Decorator für offene Endpunkte
- req.user immer definiert (null oder Fake-User)
- Rollen vorbereitet (USER / ADMIN / MOD)

Aktive Issues (Auszug, merken!):
- #242 Fake-User für Dev/Admin
- #241 Zentrale Auth-Regeln
- #240 Public Decorator
- #239 Globaler Auth-Guard (Dummy)
- #238 Request-User Typisierung
- Phase 1 – Fundament ist aktuell aktiv
- Phase 2 – Tier & Social danach

Arbeitsstil:
- Klare Pfade nennen (vollständig)
- Kurz & gebündelt, kein Datei-Hopping
- Backend zuerst stabil, Frontend später anbinden



---

# ✅ PROJEKT-BACKUP · STAND **26.12.2025 (TAGESABSCHLUSS)**

**Projekt:** OnlyPets (ehemals OnlyCats)

---

## STACK

* **Backend:** NestJS + Prisma
* **DB (DEV):** PostgreSQL (Docker)
* **Frontend:** Next.js (separat, nicht Teil dieses Blocks)

---

## CORE IDEA

* Tiere sind **primäre Entität**
* Kein Post ohne Pet
* User sind sekundär

---

## DATA PRINCIPLES

* Single Source of Truth
* `Pet.age` wird **niemals gespeichert**
* Stattdessen: `Pet.birthDate: DateTime`
* Alter & Geburtstag werden **immer berechnet**
* Keine redundanten Altersfelder

---

## PET RULES

* `birthDate` optional, aber bevorzugt
* `fallbackAge` nur temporär (nicht persistent)
* Pet-Edit erlaubt birthDate-Korrektur
* `type` & `breed` immutable
* `visibility`: `public | followers` (serverseitig enforced)

---

## DATABASE (DEV – AKTUELL STABIL)

* PostgreSQL läuft **im Docker**
* Port: **55432**
* Credentials:

  * user: `onlypets_user`
  * pass: `onlypets_pass`
  * db:   `onlypets`
* `DATABASE_URL`:

  ```
  postgresql://onlypets_user:onlypets_pass@localhost:55432/onlypets
  ```

---

## SEED STATUS

* `seed.ts` vollständig funktionsfähig
* Seed **ohne Passwort** (Auth kommt später)
* User via **upsert** (idempotent)
* Enthält:

  * Alpha-User
  * Pets mit `birthDate`
  * Posts
  * Follow-Beziehungen
* Reihenfolge fix:

  * Migration → Seed
* Seed mehrfach ausführbar **ohne Fehler**

---

## AUTH STATUS – **PHASE 1 ABGESCHLOSSEN (HEUTE)**

* ❌ Noch kein Passwortfeld im User-Model
* ❌ Kein echter Login (bewusst verschoben)
* ✅ Guard-first Architektur umgesetzt
* ✅ Globaler DummyAuthGuard aktiv
* ✅ `@Public()` Decorator implementiert
* ✅ `req.user` ist **immer definiert** (`null` oder Fake-User)
* ✅ Rollen vorbereitet (`USER | MOD | ADMIN`)
* ✅ Fake-User steuerbar über ENV
* ✅ Keine Auth-Logik in Services

---

## BACKEND STATUS – **HEUTE ERREICHT**

* NestJS **korrekt gebootstrapped**
* HTTP-Driver (`@nestjs/platform-express`) installiert
* TypeScript **strict & stabil**
* Decorators korrekt konfiguriert:

  * `experimentalDecorators`
  * `emitDecoratorMetadata`
* Globaler Auth-Guard registriert
* **HealthController aktiv**

  * `GET /health`
  * Antwort: `{ status: "ok", timestamp }`
* **Smoke Test erfolgreich**

  * Server antwortet
  * Routing funktioniert
  * Auth blockiert Public-Routen nicht

---

## ISSUE STATUS (GITEA)

**HEUTE ERLEDIGT & GESCHLOSSEN:**

* #238 Request-User Typisierung
* #239 Globaler Auth-Guard (Dummy)
* #240 Public Decorator
* #241 Zentrale Auth-Regeln
* #242 Fake-User für Dev/Admin

➡️ **Phase 1 – Fundament offiziell abgeschlossen**

---

## LAST ACTIONS (HEUTE)

* NestJS Backend startfähig gemacht
* ts-node / TS / Decorator-Fehler sauber gelöst
* DummyAuth produktiv aktiviert
* Health-Endpoint als Smoke Test eingebaut
* Vollständiger **Backup-Commit** erstellt
* Push zu Gitea durchgeführt

---

## AKTUELLER PROJEKTSTATUS

🟢 **Backend Fundament stabil**
🟢 **Auth-Architektur vorbereitet**
🟢 **DB & Seed zuverlässig**
🟢 **Bereit für Phase 2**

---

## NEXT INTENDED STEPS (NICHT HEUTE)

* Phase 2:

  * Pets / Posts Controller aktivieren
  * Feed & Discovery real testen
* Oder:

  * Auth Phase 2 (passwordHash + JWT)
* Oder:

  * Frontend anbinden

---

## FAZIT (intern & ehrlich)

> Das heutige Ziel war **nicht Features**,
> sondern **Stabilität, Architektur und Reproduzierbarkeit**.
>
> **Ziel erreicht.**

---

Wenn du willst, mache ich dir das beim nächsten Start:

* als **CHANGELOG.md**
* oder als **`PROJECT_STATUS.md`**
* oder direkt als **README-Abschnitt**

---

Mega gut gepflegtes Tagebuch 👍
Ich habe deinen Text **inhaltlich geprüft, konsolidiert und auf den HEUTIGEN Stand erweitert**
– ohne deinen Stil kaputtzumachen.

Unten bekommst du **eine neue, saubere TXT-Version**, **1:1 Copy-Paste**, die du:

* als neues Tagebuch ablegen kannst **ODER**
* als Ersatz für die bisherige Datei nutzen kannst

Ich habe **nur ergänzt & präzisiert**, nichts „schöngefärbt“.

---

# 📘 PROJECT ONLYPETS – ENTWICKLERTAGEBUCH

**(ehemals OnlyCats)**

**Stand:** **27.12.2025 – FEED & FRONTEND STABILISIERT**

---

## STACK

* **Backend:** NestJS + Prisma
* **DB (DEV):** PostgreSQL (Docker)
* **Frontend:** Next.js (App Router, getrenntes Projekt)
* **Repo:** Gitea (selfhosted, Issues aktiv)
* **OS:** Windows (PowerShell)

---

## CORE IDEA

* Tiere sind **primäre Entität**
* Kein Post ohne Pet
* User sind sekundär (Owner / Kontext)

---

## DATA PRINCIPLES

* Single Source of Truth
* `Pet.age` wird **niemals gespeichert**
* Stattdessen: `Pet.birthDate: DateTime`
* Alter & Geburtstag werden **immer berechnet**
* Keine redundanten Altersfelder

---

## PET RULES

* `birthDate` optional, aber bevorzugt
* `fallbackAge` nur temporär (nicht persistent)
* Pet-Edit erlaubt birthDate-Korrektur
* `type` & `breed` immutable
* `visibility`: `public | followers` (serverseitig enforced)

---

## DATABASE (DEV – STABIL)

* PostgreSQL läuft **im Docker**
* Port: **55432**
* Credentials:

  * user: `onlypets_user`
  * pass: `onlypets_pass`
  * db:   `onlypets`
* `DATABASE_URL`:

  ```
  postgresql://onlypets_user:onlypets_pass@localhost:55432/onlypets
  ```

---

## BACKEND STATUS (AKTUELL)

* Prisma Schema vollständig vorhanden
* Migration erfolgreich ausgeführt
* Tabellen existieren
* Follow / Unfollow implementiert
* Visibility-Logik (`public | followers`) vorbereitet
* Notifications vorbereitet (FOLLOW, BIRTHDAY – später)
* Feed-Endpoint `/feed` funktionsfähig
* Backend läuft stabil auf **Port 3001**

---

## SEED STATUS

* `seed.ts` vollständig funktionsfähig
* Seed **ohne Passwort** (Auth kommt später)
* User via **upsert** (idempotent)
* Enthält:

  * Alpha-User
  * Pets mit `birthDate`
  * Posts
  * Follow-Beziehungen
* Reihenfolge:

  * Migration → Seed
* Seed mehrfach ausführbar **ohne Fehler**

---

## AUTH STATUS – PHASE 1 ABGESCHLOSSEN

* ❌ Kein Passwortfeld im User-Model
* ❌ Kein echter Login (bewusst verschoben)
* ✅ Guard-first Architektur
* ✅ Globaler `DummyAuthGuard`
* ✅ `@Public()` Decorator
* ✅ `req.user` immer definiert (Fake-User oder `null`)
* ✅ Rollen vorbereitet (`USER | MOD | ADMIN`)
* ✅ Fake-User steuerbar per ENV
* ✅ Keine Auth-Logik in Services

---

## FRONTEND STATUS – **HEUTE ERREICHT**

* Frontend läuft stabil auf **Port 3000**
* API-Anbindung an Backend (`3001`) erfolgreich getestet
* `/feed` Route existiert & funktioniert
* App Router korrekt genutzt
* **Mock-Feed aktiv**, kein Backend-Zwang

### Feed-Logik (Frontend)

* Follow-Feed + Discovery-Feed kombiniert
* Discovery-Ratio: **15 %**
* Relevance-Score:

  * Pet-Typ
  * Rasse
  * Altersnähe
  * Likes & Comments
* `isDiscovery` sauber an `PostCard` durchgereicht

### PostCard Status

* Typen konsolidiert (`petBirthDate?` ergänzt)
* Birthday-Logik vorbereitet
* Relative Zeit via `timeAgo`
* UX-Polish:

  * klare Hierarchie (Titel / Meta / Text)
  * Action-Zone (Like / Comment)
  * Preview-Modal mit Touch-Dismiss

➡️ **Mock → Backend-Feed später nahezu 1:1 möglich**

---

## ISSUE STATUS (GITEA)

### Heute neu abgeschlossen:

* **#244 – Frontend: Feed-Route stabilisieren & PostCard UX-Polish** ✅

### Bereits erledigt (Phase 1 – Fundament):

* #238 Request-User Typisierung
* #239 Globaler Auth-Guard (Dummy)
* #240 Public Decorator
* #241 Zentrale Auth-Regeln
* #242 Fake-User für Dev/Admin

➡️ **Phase 1 offiziell abgeschlossen**
➡️ **Frontend-Feed vorbereitet**

---

## LAST ACTIONS (HEUTE)

* Backend-Ports bereinigt (3001)
* Frontend / Backend parallel stabilisiert
* Feed-Route verifiziert
* Mock-Feed & Discovery-Logik geprüft
* Typ-Inkonsistenzen behoben
* UX-Polish umgesetzt
* Commit & Push durchgeführt
* Issue #244 dokumentiert & geschlossen

---

## AKTUELLER PROJEKTSTATUS

🟢 Backend Fundament stabil
🟢 Auth-Architektur vorbereitet
🟢 DB & Seed zuverlässig
🟢 Frontend-Feed stabil (Mock)
🟢 Klarer Übergang zu Phase 2

---

## NEXT INTENDED STEPS (NACH BREAK)

* Phase 2:

  * Mock-Feed → echtes `/feed` Backend
  * Pets / Posts Controller vertiefen
* Oder:

  * Auth Phase 2 (passwordHash + JWT)
* Oder:

  * Frontend weiter UX-polishen

---

## FAZIT (INTERN)

> Heute ging es **nicht um neue Features**,
> sondern um **Stabilität, Konsistenz und Zukunftssicherheit**.
>
> **Ziel erreicht. Sehr guter Stand für eine Pause.**



